package com.javacoo.junit.generator.api.plugin;

import java.util.Map;

import com.javacoo.xkernel.spi.Spi;

/**
 * 模板插件
 * <li>此插件目的是为自定义模板生成规则提供入口，程序会根据插件提供的模板数据渲染指定路径下，指定模板名称的模板，并输出到指定目录</li>
 * <li>插件机制基于Java SPI机制的扩展，原理及开发步骤见：https://gitee.com/javacoo/xkernel</li>
 * <li>注意:目前只支持Freemarker模板引擎，开发手册见：http://freemarker.foofun.cn/</li>
 * @author: duanyong@jccfc.com
 * @since: 2021/1/4 10:07
 */
@Spi("default")
public interface TemplatePlugin {
    /** 包路径 */
    public static final String TEPMLATE_KEY_BASE_PACKAGE = "basePackage";
    /** 日期 */
    public static final String TEPMLATE_KEY_DATE = "date";
    /** 类名 */
    public static final String TEPMLATE_KEY_CLASS_NAME = "className";
    /** 需要导入的class集合 */
    public static final String TEPMLATE_KEY_IMPORT_CLASSES = "importClasses";
    /** 方法集合 */
    public static final String TEPMLATE_KEY_METHODS = "methods";
    /**
     * 根据类对象获取模板数据
     * <li>此数据用于填充模板</li>
     * @author duanyong@jccfc.com
     * @date 2021/1/4 11:09
     * @param sourceClass:类对象
     * @return: java.util.Map<java.lang.String,java.lang.Object>
     */
    Map<String, Object> getTemplateData(Class sourceClass);
    /**
     * 获取模板路径
     * <li>外部模板所在路径</li>
     * @author duanyong@jccfc.com
     * @date 2021/1/8 10:57
     * @return: java.lang.String
     */
    String getTemplatePath();
    /**
     * 获取模板名称
     * <li>模板名称，带后缀</li>
     * @author duanyong@jccfc.com
     * @date 2021/1/5 11:41
     * @return: java.lang.String 模板名称
     */
    String getTemplateName();

}
